import axios from 'axios'
import Vue from 'vue';

// `params` 是与请求一起发送的 URL 参数
// 必须是一个简单对象或 URLSearchParams 对象

// `data` 是作为请求体被发送的数据
// 仅适用 'PUT', 'POST', 'DELETE 和 'PATCH' 请求方法

// config 为对本次请求的配置，包括请求方法、请求链接请求内容等
export function request(config) {
    // 用来使用Vue的API
    let vue = new Vue();
    // 创建axios实例
    const instance = axios.create({
      baseURL: "http://localhost:8002",
      timeout: 50000,
      withCredentials: true, // add this line
      // `timeout` 指定请求超时的毫秒数。
      // 如果请求时间超过 `timeout` 的值，则请求会被中断
      // 默认值是 `0` (永不超时)
    });

    // 利用axios实例创建拦截器,对请求request的拦截
    instance.interceptors.request.use(
        // 发生请求前的处理
        config => {
            return config;
        },
        err => {
            // 请求错误处理
            // return a Promise object that is rejected with a given reason.
            return Promise.reject(err);
        }
    );

    // 利用axios实例创建拦截器，对响应response的拦截
    instance.interceptors.response.use(
        res => {
            // 请求成功对响应数据做处理

            // return res // 该返回对象会传到请求方法的响应对象中
            
            return res.data;// 只返回response中的data，即请求返回的对象
        },
        error => {
            return Promise.reject(error.data); // 返回接口返回的错误信息
        }
    )
    // 发送网络请求
    return instance(config);
}